﻿namespace game
{
    class NPC : Props
    {
        public string Name { get; set; } = "";
        public bool Gender { get; set; }
        public int Age { get; set; }
        public int GongJi { get; set; }
        private int hp = 100;
        public int HP
        {
            get { return hp; }
            set
            {
                if (value <= 0)
                {
                    hp = 0;
                }
                else { hp = value; }
            }
        }
        public int Experience { get; set; } = 0;
        public int Level { get; set; } = 1;

        public void WriteNpc(string Name, bool xb, int age, int GongJi)
        {
            this.Name = Name;
            Gender = xb;
            Age = age;
            this.GongJi = GongJi;
        }

        public bool Fight(NPC 被击打)
        {
            Console.WriteLine($"{Name} 正在与 {被击打.Name} 战斗！");
            被击打.HP -= GongJi;

            Console.WriteLine($"{被击打.Name} 受到了 {GongJi} 点伤害，剩余血量： {被击打.HP}");

            if (被击打.HP <= 0)
            {
                Console.WriteLine($"{被击打.Name} 被一击致命，已无法使用药水抢救！");
                return false;
            }

            //判断是否使用生命恢复药水       
            if (被击打.HP <= 10 && 被击打.HealthPotion > 0)
            {
               被击打.恢复生命(true);
            }
            else
            {
                Console.WriteLine($"{被击打.Name} 生命恢复药水已用尽！");
                Console.WriteLine("按下 y 殊死一搏，按下 p 逃跑");

                if (Console.ReadLine() == "p")
                {
                    Console.WriteLine($"{被击打.Name} 逃跑了！");
                    return true;
                }
            }

            //判断是否被击败
            if (被击打.HP <= 0)
            {
                Console.WriteLine($"{被击打.Name} 被击败了！");
                return false;
            }
            else
            {
                return false;
            }
        }

        public void GainExperience(int amount)
        {
            Experience += amount;
            Console.WriteLine($"{Name} 获得了 {amount} 点经验！");
            if (Experience >= Level * 10)
            {
                LevelUp();
            }
        }

        public void LevelUp()
        {
            Level++;
            Experience = 0;
            GongJi += 5;
            HP += 20;
            Console.WriteLine($"{Name} 升级了！当前等级：{Level}，攻击力：{GongJi}，血量：{HP}");
        }

        /// <summary>
        /// 回血功能
        /// </summary>
        /// <param name="_模式">True为战斗模式,提示下一回合</param>
        public void 恢复生命(bool _模式)
        {
            if (this.HealthPotion > 0)
            {
                Console.WriteLine($"{this.Name} 当前剩余生命恢复药水，{this.HealthPotion}");
                if (_模式)
                {
                    Console.WriteLine("按下 1 使用生命药水,按下 2 进行下一回合");
                }
                else
                {
                    Console.WriteLine("按下 1 使用生命药水,按下 2 退出");
                }


                标签1:
                switch (Console.ReadLine())
                {
                    //使用生命恢复药水
                    case "1":
                        this.HP += 20;
                        this.HealthPotion -= 1;
                        Console.WriteLine($"\n{this.Name} 使用了生命恢复药水，恢复了20点血量，当前血量：{this.HP}");
                        Console.WriteLine($"{this.Name} 当前剩余生命恢复药水，{this.HealthPotion}");
                        Thread.Sleep(1000);
                        break;
                    //退出
                    case "2":
                        if (_模式)
                        {
                            Console.WriteLine("继续战斗");
                        }
                        else
                        {
                            Console.WriteLine("ok");
                        }
                        
                        Thread.Sleep(1000);
                        break;
                    default:
                        Console.WriteLine("输入错误");
                        Thread.Sleep(1000);
                        goto 标签1;
                }

            }
            else
            {
                Console.WriteLine("生命恢复药水不足");
            }
        }
    }
}